star_plain

奥普特培训工程笔记

引入(零):机器视觉 与 奥普特Smart3

ll0.1.什么是机器视觉

​ 我们每天醒来,睁开双眼,就通过视觉感知这个世界。眼睛是我们获取信息最重要、最直接的通道,它帮助我们辨认方向、拿取物品、阅读文字,这一切都依赖于高效精准的生物视觉系统。 ​ 计算机作为人类最伟大的发明之一,自诞生之初就致力于模拟人脑的运算能力,协助我们处理繁重而重复的计算任务。从庞大笨重的大型机到今天功能强大的个人电脑、智能手机乃至超级计算机,其计算能力实现了跨越式发展。然而,一个仅有大脑而无法感知环境的系统能力终究受限。于是,我们开始为计算机装配感官,希望它能像我们一样看见和听见,从而执行更复杂的任务

机器视觉与人工视觉的对比 在以往大批量工业生产过程中,主要靠人工视觉对产品进行测量、识别和分析。由于人工视觉处理时,效率低,稳定性差且精度不高,用机器视觉可以大幅度提高处理效率和自动化程度;同时,在一些不适合人工作业的危险工作环境或人眼难以满足要求的场合,也常用机器视觉来替代人眼,如核电站监控、晶圆缺陷检测;而且机器视觉易于实现信息集成,是实现计算机集成制造的基础技术之一。由于机器视觉系统可快速获取大量信息,且易于自动处理及信息集成,故在现代自动化生产过程中,机器视觉系统广泛用于装配定位、产品质量检测、产品识别、尺寸测量等方面。

  机器视觉 人工视觉
效率 效率高 效率低
速度 速度快 速度慢
可靠性 检测效果稳定 易疲劳、有情绪,不易保持检测效果
工作时间 可24小时不停工作 容易疲劳,工作时间有限
信息集成 可实现信息集成 不易实现信息集成
成本 成本(一次投入) 成本高
环境 适于危险的检测环境 不适于危险的检测环境

​ 在各类感知设备中,摄像头的作用尤为关键。 早期,它仅作为数字记录员负责拍摄与存储画面,图像中的内容与含义仍需人工解读。 随着技术发展,计算机逐渐能够处理一些有规律的视觉任务,例如自动对焦、图像定位、基础图案识别等,但这还远远不够。 ​ 当计算机的视觉能力从普通记录与识别,进一步转向在工业环境中执行精确检测,一门更专注、更强大的工程技术,机器视觉便应运而生。 【机器视觉是一门综合工程技术,通过集成相机、镜头、光源与计算机算法,为机器赋予视觉感知能力,使其能够在工业场景中自动完成检测、测量、识别与引导等任务

机器视觉系统简介 机器视觉顾名思义是使机器具有像人一样的视觉功能,从而实现各种检测、判断、识别、测量、定位等功能。机器视觉可以显著提高生产效率和自动化、智能化程度。一个典型的机器视觉系统包括:光源、镜头、相机、图像处理硬件、图像处理软件、执行单元等。 机器视觉综合了光学、机械、电子、计算机软硬件方面的技术,涉及图像处理、模式识别、人工智能、光机电一体化等多个领域。

​ 一个成功的机器视觉应用。 首先需要运用好光,从而获得高对比度的图像,然后进行高速稳定的图像分析处理。光源发出的光照射在被检测的物体上,物体将光反射至镜头,再通过镜头成像至相机的传感器。相机将光信号转换成电信号,并传送给主机。通过运行在主机的软件分析图像,得到物体的相关信息,如尺寸、颜色、位置、是否存在缺陷等。

​ 机器视觉主要分为图像采集硬件和视觉软件。其中视觉软件赋予机器大脑分析处理图像信息,最终完成识别、测量、定位检测等功能。

机器视觉系统工作原理 机器视觉系统通过图像采集硬件(相机、镜头、光源等)将光信号转换成图像信号,并传送给图像处理软件。图像处理软件根据像素亮度、颜色分布等信息,对目标进行特征提取,并做出相应的判断,根据结果输出来控制现场设备,实现检测功能。 视觉处理系统包含硬件和软件两方面。根据硬件的不同,机器视觉系统分为智能相机和基于PC的视觉系统。一个基于PC的机器视觉系统最为核心的部分由光源、镜头、相机、视觉处理系统四个部分组成。 img 镜头主要作用是将被测目标成像至摄像机的感光芯片上。 相机主要作用是采集图像,将光信号转换成电信号,从而输出图像给计算机。 软件的核心技术为图像处理及分析算法,它包括图像增强、图像分割、特征抽取、图像识别与分析等。通过图像处理与分析,对产品质量判断、尺寸测量,并将结果信号传输到相应的硬件进行显示或执行。

机器视觉发展趋势 随着机器视觉应用场景的复杂多样,其与深度学习算法、3D应用技术、互联互通标准等技术的融合也越来越紧密。 深度学习算法:深度学习算法模拟类似人脑的层次结构,通过深度神经网络建立从低级信号到高层语义的映射,以实现数据的分级特征表达。深度学习算法被引入机器视觉图像处理系统来进行外观检测,使识别过程更智能,视觉信息处理能力更强大。 3D应用技术:随着3D应用技术的不断深入,越来越多的3D重构技术被引入到机器视觉,如结构光、DFF、TOF、立体视觉、光度立体法等。3D图像处理与分析的算法也被研究得越来越广泛,将成为机器视觉的一个主流发展方向。 互联互通标准:机器视觉系统内部,以及与智能制造设备之间,与企业的管理系统之间,有必要进行互联互通,使设备和制造管理朝着更智能方向发展。目前视觉行业内部,包括EMVA、AIA、CMVA、JIIA等,合作制定了GenICam标准。AIA制定了GigE Vision,USB3 Vision等相机通信协议。视觉行业还与其他行业协会合作,不断拓展互联互通的外延,旨在促成视觉系统与其他行业的互联互通。

ll0.2.奥普特smart3 介绍

​ 奥普特smart3 是一款高度开放易用的视觉软件,综合了近百个行业的视觉应用经验,遵循以人为本的设计理念,契合实际应用需求。Smart3 软件采用可视化图形编程,无需大量代码,使用简单易上手,快速响应需求,缩短项目开发周期。针对复杂的项目应用,Smart3 可新增子流程,为多工位运行提供简洁、可读性高的流程图。子流程支持事件触发或常驻运行方式,易复用和易理解。 ​ Smart3 拥有丰富的界面控件,能快速实现界面布局和管控交互。设计以人为本,改善传统软件界面亲和力差的问题。在不停机、不停产的情况下,Smart3 支持在线调试,通过调整参数快速完成项目检测。Smart3 具有三百余种算法,集成2D、3D视觉及深度学习视觉应用,基于并行异构计算、任务级并发技术,可快速准确的分析图像信息。Smart3 软件支持脚本编程及开发扩展接口,可快速实现二次开发程序,满足用户自定义需求。Smart3 软件已在各行业数十万台设备稳定运行,如锂电、光伏、三C、电子、医药、液晶面板等。

ll0.2.1.版本说明

​ Smart3 是opt公司推出的标准工业视觉软件,经过多年持续迭代与优化,目前已发展至成熟稳定阶段。截至2025.10.25,最新发布版本为Smart3 1.9.2.6,更新日期为2025.10.13。本次培训将使用Smart3 比1.9.2.0,该版本与最新版功能基本一致,不影响学习与实验。

​ 软件版本号说明。Smart3 版本号采用四位数字标识。第一位是重大功能更新或架构调整,第二位是中等规模的功能增强,第三位是小幅功能改进或优化,第四位是问题修复与局部优化。

注意事项:

ll0.2.2.软件安装

1. 双击获取到的安装包文件,启动安装程序。在语言选择界面中选择安装语言,点击确认,进入下一步。
2. 阅读软件许可协议,必须勾选我同意此协议方可点击下一步继续安装,否则将退出安装流程。
3. 选择软件安装路径,确认后点击下一步。
4. 在安装信息确认界面中核对设置,如无误则点击安装开始正式安装。
5. 安装完成后,点击完成退出向导,软件图标将默认创建于桌面。

注意事项:一、本安装流程适用于 smart3 v1.9系列 版本,其他版本可能存在差异。

​ 二、如在安装过程中遇到任何异常或报错,建议截图保存,并及时联系研发或产品支持中心协助处理。

ll0.2.3.加密狗使用

​ Smart3 、软件加密由verbox工具提供,分为线下的硬件加密狗和线上软件加密狗。Verbox工具在安装Smart3 时会自动捆绑安装,且默认随系统自启动,可以从Windows右下角小图标进入varbox界面进行查看。

​ 加密狗型号区分为保障软件正常授权,请根据使用的Smart3 版本配套使用对应类型的加密狗。目前项目中使用的新旧两种加密狗外形相同,但互不通用,若使用错误将导致无法打开软件。

加密狗适用于Smart3 v1.7.0.0以下版本以及smart2 系列软件。新加密狗适用于Smart3 v1.8.1.0及以上版本。由于两种加密狗外观无差异,如需查看新旧加密狗类型,先打开右下角的verbox工具,点击切换到我的软件,找到界面中显示的加密狗许可。如未显示任何许可,则表示未识别到加密狗或该加密狗已失效。双击该许可项查看详细信息,点击更多查看加密狗产品ID,根据ID后缀判断类型,后缀为 150 即为新加密狗,其他后缀为旧加密狗或其他类型加密狗。

​ Smart3 软件的新加密狗根据功能权限划分为五种不同类型,旧加密狗不区分功能,统一具备完整权限。

​ 对于Smart3 v1.8.1.0 以上版本,虽然安装包中已包含全部功能模块,如2D、3D、深度学习等,但实际可使用哪些功能取决于所使用的加密狗型号。若加密狗未授权某项功能,则对应模块将无法使用。如需查看当前加密狗权限,打开Smart3 软件,依次点击菜单帮助关于,在弹出窗口中即可查看当前识别的加密狗型号信息。

加密狗型号列表以及对应功能如下

存货名称 规格型号
Smart3 智能视觉系统软件_全能加密狗 Smart3-M
Smart3 智能视觉系统软件_2D 功能加密狗 Smart3-U
Smart3 智能视觉系统软件_2D+深度学习 Smart3-U-DL
Smart3 智能视觉系统软件_2D+3D Smart3-U-3D
Smart3 智能视觉系统软件_定制款 Smart3-S

​ 硬件加密狗使用。将加密狗插入到电脑端USB口,同时verbox界面识别到加密狗,确认加密狗信息无误后,即可开始使用Smart3 软件。软件加密狗使用获得软件狗授权码以后,打开vbox用户工具,点击云与软锁本地软锁授权码在线激活。进入授权码激活界面,将授权码输入对应位置,点击激活即可开始使用Smart3 软件。

==教学时分配的是 M 型==

ll0.2.4.软件界面布局

​ 软件安装完成且加密狗使用无误后,在桌面上找到 Smart3 软件,双击打开,进入 Smart3 软件界面。 最上一排属于菜单栏,包含菜单按钮、方案文件、操作方案、运行停止、切换、运行界面、一些必要的参数设置、一些使用小工具以及用户登录按钮。 ​ 左边是工具箱,Smart3 工具箱内工具分为十六个大类,点击、折叠或展开、收起、打开所有工具,同时支持搜索栏搜索,方便快速寻找工具。 ​ 正中间是流程图界面,它是Smart3 方案编写的主要区域,负责搭建方案、运行逻辑、图像与数据的处理以及收发规则等,同时可以在该区域切换、添加、删除子流程。 ​ 右边是当前算子块参数设置区,根据算子块类型显示对应的内容。 ​ 正下方是监控区域,可以在这里查看变量结果、算子工具结果、运行日志以及错误信息。

软件界面布局

ll0.3.具体使用流程

ll0.3.1.引入

​ 在工业自动化项目中,视觉系统充当设备的眼睛,负责定位物料位置或判断产品是否合格,就像人眼通过神经节将图像信息传递给大脑一样。在工厂中,视觉系统也需要将图像处理结果传输给机械手或其他自动化设备,而这离不开稳定可靠的通讯连接。

​ 目前通讯方式多种多样,不同自动化设备厂商采用的通讯协议与通讯方式也各不相同,要逐一厘清各厂家在通讯机制上的差异并非易事。

​ 然而,在Smart3 软件中,这一问题已得到有效解决。

​ 软件已内置并封装了市面上常见的各类通讯方式,用户无需深入理解每种通讯背后的复杂原理,只需根据指引填写相应参数,即可快速与自动化设备建立连接,实现高效的数据交互。

ll0.3.2.正式开始

接下来,我们将以最常用、通用且基础的 TCP/ IP 通讯为例,为大家演示具体操作流程,用来模拟视觉与其他自动化设备的交互。

TCP/ IP 通信协议是一套基于网络接口的通信规范,也是全球应用最广泛、最基础的一组网络协议。我们日常的上网浏览、在线游戏、短视频观看等都依赖于 TCP/ IP 协议来实现。无论是手机还是电脑,在接收和解析网络数据时均遵循该协议的规范。

TCP/ IP 协议的核心作用在于统一网络数据传输的格式与规则。它明确定义了数据中每个部分的用途、编码方式及组织结构,从而确保不同设备和系统之间能够准确高效的交换信息。

以上是 TCP/ IP 的一些相关知识,接下来让我们在Smart3 上动手连接并收发数据。

我们需要用到Smart3 软件以及模拟运控机械手的通讯助手。

ll0.3.2.1. Smart3 软件设置

首先让我们先打开Smart3 ,找到菜单栏的硬件设置,点击打开,把硬件设置切换到通讯页。在左侧通讯选择栏找到并切换 TCP/ IP ,在参数栏输入对应的连接参数。

02硬件通信设置

针对这四位参数,需要注意的是。

image-20260331154226397

一、驱动名称 是此连接在Smart3 上的一个标识,实际不干扰通讯连接。

二、模式 TCP/ IP 通讯需要客户端与服务端相连为一组通讯连接,所以互相通讯的两方需要是不同的模式。即Smart3 作为服务端时,要连接的对象必须是客户端,反之亦然。

三、主机IP IP是一个网络地址,每个网络上的设备都有它自己的IP地址,我们需要依靠这个IP地址在网络上寻找对应的设备。

电脑上IP地址的查看方式如下:在Windows任务栏或键盘上同时按住win加S找到搜索,在搜索框输入控制面板,找到后点击进入控制面板;再在控制面板中找到并进入网络和共享中心;在网络和共享中心中找到并点击更改适配器设置,打开网络适配器后会显示这台电脑所有的网络,找到需要查看的网络,如果无法区分,建议拔插网线,右键打开需要查看网络的选项,点击状态详细信息即可查看该网络的IP地址。

四、端口号 是当前IP地址下的 TCP/ IP 通讯的再次细分。如果把IP地址比作现实中大楼的地址,端口号就是具体房间号。回到我们Smart3 软件,将这四个参数一一输入,驱动名称和端口号在这里不做要求。模式选服务端与客户端皆可,这里我们先用服务端做演示。

==IP地址我们输入一个特殊的IP地址,127.0.0.1==,这个IP地址是Windows系统为本机预留的IP地址。即使没有连接网络,该IP地址也是连接状态,它是Windows预留用来调试以及本机内部通讯的地址。

设置完参数以后,我们点击添加,可以看到窗口中已出现一个连接,日志栏提示启动成功,但连接状态显示红色,即未连接。这就需要我们之前提到的通讯助手作为另一端来与它相连了。

ll0.3.2.2. 通讯助手设置

打开通讯助手,选择对应的通讯模式,包括TCP server(服务端)和TCP client(客户端)。按照我们之前提到的 TCP/ IP 通讯模式,这里要选客户端才能与服务端的Smart3 相连。选择客户端后,点击左上角创建,在弹出的窗口中填上与Smart3 对应的参数,即IP地址与端口号需与Smart3 上保持一致。参数设置完成后,点击确认创建连接,再点击连接完成助手与Smart3 的连接。此时,如果Smart3 作为客户端连接,需要在Smart3 上点击配置完成并退出硬件设置界面。

image-20260331160314993

完整配置示例:

05.1-完整配置示例_cr

ll0.3.2.3. 算子配置与参数详解

ll0.3.2.3.1算子块定义

如图所见的block1,

算子块(也称为普通算子块)的定义如下:

ll0.3.2.3.2 TCP/IP算子配置

鼠标左键点击,选中流程图界面默认添加的算子块,再到左边工具箱,找到并打开通讯设置分类,在分类下鼠标双击 TCP/ IP ,进入 TCP/ IP 算子参数界面。

image-20260331160808490

一、连接配置 在连接下拉框选择当前的连接,点击右侧的配置,进入之前的硬件设置界面,查看所有通讯连接。连接状态显示当前所选是否已连接。

二、模式与类型 模式与类型按需求选择,我们先测试Smart3 读取助手发过来的数据,默认的读类型使用默认的字符串,也就是我们常见的文字形式。另一种内存数据是一种更为基础的计算机数据类型,表现为一组组的十六进制数字。字符编码是将计算机二进制数字转换成字符的编码方式,我们使用默认的即可。

三、连接超时 表示该通讯算子运行超过多少毫秒以后,未接收到数据即报错并继续往下运行,下一个算子未打开此开关则默认是5000毫秒,这里我们使用默认即可。

四、保持连接 的作用是在连接异常断开的情况下,是否允许 Smart3 主动发起并重新建立连接。按照 TCP/ IP 客户端与服务端相连的模式,一般只有 Smart3 作为客户端时,此设置才有实际作用,这里我们默认即可。

五、清空缓存 是针对 TCP/ IP 通讯的另一种特质。 TCP/ IP 通讯并不是两个设备直接收发数据即可,而是两者在建立连接后会形成一个缓冲区间,可以理解成一个小型的存储空间。两边发送过来的数据都会先存在这个空间内,需要时再从空间内读取出来,这样可以有效防止某一方突然断开连接以后导致的数据丢失。清空缓存依旧默认即可。设置好参数后,点击右下角确定会退出参数设置界面并保存当前设置。

image-20260331161417702

接收端配置:

image-20260331173845575

可以看到 TCP/ IP 算子已经添加进入算子块内,现在我们可以来测试一下。切换到通讯助手,在输入框内输入要发送的字符,点击发送,再切换回Smart3 。

右键算子块,选择运行块。左键选中算子块内的 TCP/ IP 算子,下方的日志栏会显示当前所选算子的输出结果。我们再试一下从Smart3 发送数据到通讯助手。依旧从工具箱双击 TCP/ IP 算子,打开 TCP/ IP 算子参数。在算子参数界面,从读模式改为写。可以看到参数栏多了一些参数,主要用于自动为待发送的数据添加一些格式符。这里我们不用去特意设置其他参数,保持默认,在待发送数据框内填入我们想要发送的数据,再在右下角点击确认,即完成发送数据的配置。

发送端配置:

image-20260331173942066

运行结果:

image-20260331101220461

鼠标右键再次运行该算子块。运行完成后,可以看到通讯助手已经成功接收该数据。随后我们再测试几遍。

ll0.3.2.3.3注意事项

一、 在测试Smart3 发送数据时,我们等待了较长时间,主要因为在运行算子块时,同时会运行块内接收数据的 TCP/ IP 算子,此时助手并未发送数据过来,从而接收数据算子在延时等待,直到到达超时的时间,即 TCP/ IP 算子内的连接超时。

二、 以上收发数据,两个算子在一个算子块内的方式仅作为演示,实际现场一般不以此等方式使用。

ll0.3.2.4. 添加其他流程块

将鼠标放置于任意箭头的线段上,可以添加流程控制模块

image-20260331191504486

再配合流程控制模块共同实现视觉检测方案,其简介见下表 2.1.7。

图标 说明 备注
image-20260331190748644 主流程起始块 程序入口
image-20260331190819304 普通算子块 可添加不同算子实现图像获
取、检测算法和通信控制等
image-20260331191008733 条件分支算子块 程序结构控制,相当于 C 语
言中的 switch 语句
image-20260331191016078 多线程算子块 实现多线程运行,至少有两
个线程
image-20260331191022286 goto跳转块 实现算子跳转
image-20260331191103527 流程运行结束块 结束程序
ll0.3.2.4.1.goto块基本配置

image-20260331192301487

goto块测试结果:

image-20260331103808917

ll0.3.2.4.2.switch块基本配置

11switch块基本配置

switch块测试:

发送【1】继续程序,发送其他任意字符结束程序

13switch块测试

工程一:基本流程练习

素材:方向图标.zip - 蓝奏云

gc1.1.自锁

image-20260331194712240

gc1.1.1.通讯块数据配置

image-20260331195809397

gc1.1.2.goto块配置

image-20260331200007480

跳转位置选通讯块,跳转条件设置为通讯状态的值,false假

gc1.2.switch分支

gc1.2.1.switch配置

image-20260331200519930

gc1.2.2.普通算子块配置

image-20260331202057924

gc1.2.2.1.图像导入 与 图形显示

image-20260331203231154

gc1.3.运行结果:

image-20260331182112319

工程二:基本图形判断

素材:基本图形匹配.zip - 蓝奏云

gc2.1.流程概览

gc2.1.1.主要模块

流程主要模块:【来料检测】

image-20260331205109069

图像导入要注意勾选【图片循环加载】,让每次运行后切换下一张图

image-20260401145356142

gc2.1.2.主要使用算子

主要使用工具:【有无检测】—>【Blob分析】           【辅助工作】—–>【逻辑运算】

image-20260331203438554 image-20260331204641748

gc2.2.步骤细节

image-20260331205923188

注意:【来料判断】–>【图形显示】要取消【清除窗口】

image-20260401143118099

gc2.3.运行结果

image-20260331182542690

理论(一):图像处理基础概念

ll1.1.图像基础知识

ll1.1.1. 工业相机的内部结构

工业相机的成像过程是从光学信号转换为数字信号的过程。其内部基础结构主要包含以下部分:

镜头的成像是以凸透镜成像的原理为基础,通过透镜的组合,把物体发出或者反射的光线成像在像平面上(与芯片面重合) 。运用凹凸透镜组合能有效地平衡球差、轴外像差、色差等各种像差,提高成像质量。img


ll1.1.2. 核心成像原理:光电效应

成像的核心原理基于光电效应

  1. 光信号转电信号
    • 传感器芯片由许多横纵排列的感光单元(传感器)组成。
    • 当光线照射到传感器上时,根据光线的强弱,传感器会将其转换为对应强弱的电信号
    • 规律:照射光线越强 –> 电信号越强;光线越弱 –> 电信号越弱。
  2. 成像过程
    • 镜头(如凸透镜)将光线聚焦,投射到传感器阵列上。
    • 传感器阵列上的每个小单元(像元)根据接收到的光照情况产生不同的电信号(亮区信号强,暗区信号弱)。
    • 系统收集所有传感器的电信号,通过数字量化,传输给电脑。
    • 电脑将数值还原为亮暗(或颜色),最终形成图像。

ll1.1.3. 关键基础概念

ll1.1.3.1. 镜头参数

ll1.1.3.1.1. 焦点/焦距

与光轴平行的光线射入凸透镜时,理想的镜头应该是所有的光线聚集在一点后,再以锥状扩散开来,这个聚集所有光线的点叫做焦点。对于单个透镜来说,焦距是指从光心到焦点的距离,如图一;对于多个透镜组成的镜头组来说,焦距是指像方主平面到焦点的距离,如图二。

img

ll1.1.3.1.2. 光圈

img

在镜头内部,有一个多边形或者圆形且面积可变的孔状光栅装置,这个装置就叫做光圈。光圈的作用是控制镜头的通光量,通常用光圈系数来描述其大小。光圈系数是指镜头焦距 与整个镜头入瞳直径D的比值,通常用f/#来表示。其计算公式:f/#=f′/D。

f/#值越小,光圈越大。一般f/#值是以√2倍递增,因此光圈常用的计数为F1.4,F2.0,F2.8,F4.0……在同一单位时间内上一级的通光面积是下一级的两倍,例如光圈从f/8调整到f/5.6,通光面积便增加一倍。

img

img

光圈对图片亮度的影响:相同应用条件下,同一镜头,光圈越大,通光孔径越大,图片越亮。

ll1.1.3.1.3. 工作距离

img

​ 工作距离(Working Distance):镜头聚焦清晰时,被测目标到镜头最前端的距离称为工作距离。实际应用中,镜头不能对任意物距下的目标都同时聚焦清晰,因此镜头的工作距离有一定范围。

ll1.1.3.1.4. 视场角/视野

1、视场角

​ 在光学工程中,视场角是指镜头对图像传感器的张角,即若y’为Sensor的半对角线长度,则视场角2θ≈2*arctan(y’/f’)。

2、视野

​ 视野(Field of View, FoV),也叫视场范围,是指镜头能观测到的实际范围。镜头的视野大小和相机的分辨率,决定视觉系统所能达到的视觉检测精度。

img

​ 相同的工作距离下,焦距越短,视场角越大,视野也就越大;相同的焦距下,视场角一定,工作距离越远,视野越大。 img

ll1.1.3.1.5. 放大倍率

放大倍率定义为像的大小与物的大小之比。 -1<β <0时,物像异侧,成倒立缩小的实像,如AA′所示,这就是镜头的成像原理。 β=-1时,物像异侧,成倒立等大的实像,如BB′所示。 β<-1时,物像异侧,成倒立放大的实像,如CC′所示,这就是显微镜的成像原理。 β>0时,物像同侧,成正立放大的虚像,如DD′所示,这就是放大镜的成像原理。

img

ll1.1.3.1.6. 分辨率

​ 分辨率是指光学系统可以测到的被测物体上的最小可分辨特征尺寸。镜头能分辨物体的细节越小,镜头的分辨率就越高。通常用像面处每毫米能够分辨的黑白相间的条纹对数(lp/mm)描述。 ​ 在实际应用中,建议镜头的分辨率不低于相机的分辨率。

img

ll1.1.3.1.7. 景深

​ 景深:能在像平面上获得清晰像的物方空间深度。即:在被摄物平面(对焦点)前后一定范围内的物体,在无需调焦的情况下,其成像仍然清晰,这段可清晰成像空间深度就是景深。

img

影响景深的主要因素

1、镜头光圈

​ 光圈越大,景深越小;光圈越小,景深越大。

2、镜头焦距

​ 镜头焦距越长,景深越小;焦距越短,景深越大。

3、拍摄距离

​ 距离越远,景深越大;距离越近,景深越小。

| img镜头光圈对景深的影响上面两张图同为OPT-C3514-5M镜头在相同工作距离下拍摄。左图的光圈为F1.4,右图的光圈为F16,可以看出右图的景深比左图的景深大。 | img镜头焦距对景深的影响 上面两张图片是在相同的光圈,相同的工作距离下拍摄的。左图是用OPT-C1218-5M拍摄的,焦距f’=12mm;右图则是用OPT-C3514-5M拍摄的,焦距f’=35mm。可以看出左图的景深比右图的景深大。 | | ———————————————————— | ———————————————————— |

| img工作距离对景深的影响 上面两张图片是用镜头OPT-C3514-5M,在光圈相同的前提下,改变工作距离拍摄的。左图是的工作距离是1.2m,右图的工作距离是4.2m,可以看出右图的景深比左图的景深大。 | | ———————————————————— |

ll1.1.3.1.8. 光学畸变

​ 光学畸变(distortion):由于镜头在不同视场放大倍率的不一样,使得像相对于物体失去相似性,这种像变形的缺陷称为光学畸变。光学畸变只影响成像的几何形状,并不影响成像的清晰度。常见的光学畸变主要有两种类型,桶形畸变和枕形畸变(如图)。

img

ll1.1.3.1.9. TV畸变

​ TV畸变是图像的视觉畸变的度量,TV畸变的定义有很多 。其中RIAA TV畸变计算公式如下: img

ll1.1.3.1.10. 后截距

1、法兰距:镜头法兰面到像面(芯片)的距离。 2、机械后截距:镜头最后的机械面到像面的距离。 3、光学后截距:镜头最后端镜片表面顶点到像面的距离。 img

ll1.1.3.2. 图像参数

ll1.1.3.2.1. 像元
ll1.1.3.2.2. 分辨率
ll1.1.3.2.3. 像素数量(“多少万像素”)
ll1.1.3.2.4. 位深度 / 灰度等级

ll1.1.4. 图像数据在电脑中的表现

注意:在购买显示器或电视时,参数中的“8bit”、“10bit”指的就是色彩/灰度位深度,数值越高,色彩过渡越自然,断层越少。

ll1.1.5. 常见图像格式与数据存储原理

ll1.1.5.1.BMP格式(无损存储)

ll1.1.5.2. JPG与PNG格式(有损/压缩存储)

ll1.1.5.3.格式对比总结

特性 BMP格式 JPG/PNG格式
压缩情况 无压缩 有压缩
数据完整性 完整保留,无失真 有丢失,算法拟合还原
文件体积
适用场景 图像处理、机器视觉 日常查看、网页展示

ll1.1.6. 灰度值与RGB色彩原理

ll1.1.6.1.灰度值

ll1.1.6.2.RGB三原色原理

ll1.2.预处理

ll1.2.1. 图像预处理与增强算法

ll1.2.1.1.图像二值化

二值化是计算机视觉中最基础、最简单且最常用的算法之一,常用于提取目标物体(如测量电容半径、定位位置等)。

原理与步骤

  1. 灰度差异分析:利用目标物体(如电容)与背景在灰度等级上的差异(例如目标比背景亮)。
  2. 阈值筛选
    • 设定一个灰度阈值(例如100)。
    • 遍历图像中的每一个像素点。
    • 若像素灰度值高于阈值(如 > 100),则保留该区域;若低于阈值,则忽略。
  3. 二值化处理
    • 激进处理:将筛选出的区域(高于阈值)全部变为纯白色,低于阈值的区域全部变为纯黑色
    • 结果:图像只保留黑白两色(0和255),最大程度去除干扰(如字符、纹理),仅保留目标形状(如圆环)。

二值化的类型


ll1.2.1.2.形态学操作

形态学主要用于去除噪点、平滑边界或连接断裂区域。

基础操作

复合操作 为了在去噪的同时尽量保持物体原有的形状特征,常将腐蚀和膨胀结合使用:

ll1.2.1.3.其他预处理工具

ll1.2.2. 通道提取

通道提取主要针对彩色图像。大部分图像处理算法(如找圆、找线、匹配)仅针对黑白图像,因为黑白图像单通道计算量小,特征计算更简单直白。

彩色转黑白原理

转换方法

注意:不同的通道提取模式可能会产生意想不到的处理效果。


ll1.2.3. 预处理工具的使用说明

ll1.3.匹配与定位

ll1.3.1. Blob分析

Blob分析是工业机器视觉中功能强大且原理相对简单的核心工具,常用于有无检测。

核心原理

参数设置与功能

结果筛选 Blob分析会输出每个连通区域的详细数据,用户可根据这些数据进行筛选,去除干扰:

输出结果


ll1.3.2. 工业视觉定位与ROI应用

定位与检测的关系

ROI与Mask概念

工业定位的高标准要求

双层定位嵌套策略 为了满足高精度与高稳定性,工业上常采用“粗定位+精定位”的嵌套模式:

  1. 粗定位
    • 目的:在大范围内搜寻,找到工件的大概位置。
    • 工具:如Blob分析。
    • 特点:允许存在一定程度的波动,不要求极高精度。
  2. 精定位
    • 目的:在粗定位的基础上,利用工件上稳定的特征进行精确锁定。
    • 方法:例如寻找矩形的四条边直线,计算交点(角点),通过对角线交叉确定中心点。
    • 优势
      • 抗干扰:相比Blob分析容易受边缘脏污或凸起影响导致中心点偏移,找线算法能更好地过滤局部干扰,保持直线特征稳定。
      • 结果:消除粗定位的波动,实现更高精度和稳定性的定位。

常见工具

ll1.3.3. 粗定位

ll1.3.3.1.灰度匹配

这是最常用且基础的匹配方式。

操作流程

  1. 新建模板
    • 在图像上绘制一个框(矩形或旋转矩形)来框选特征区域。
    • 调整技巧:旋转矩形框上的凸出红点用于旋转角度,其他红点用于调整位置。
    • 原则:尽可能框住核心特征,减少无关背景干扰。
  2. 保存与运行:保存模板后,算法会自动在图中搜寻相似区域。
  3. 结果可视化:可以通过“图形显示”参数调整结果的颜色、大小和字体。

核心原理


ll1.3.3.1.1.关键参数解析

ll1.3.3.2.特征匹配

ll1.3.3.3.轮廓匹配

轮廓匹配参数优化

ll1.3.4. 精定位

ll1.3.4.1.找点

原理

关键参数


ll1.3.4.2.找线

原理

参数设置


ll1.3.4.3.找圆

原理

ROI形状


ll1.3.4.4.几何关系

功能

操作方法

工程三:手机框架定位

素材:手机框架定位.zip - 蓝奏云

gc3.1.流程概览

image-20260401143747525

gc3.2.步骤细节

图像导入:勾选【图像循环加载】 Blob分析:删除默认的 Roi 框,参考跳转到指定位置 ROI 校正基准设置:如图 image-20260401150521196

找直线 1 ~ 4

image-20260401151114186

image-20260401151146166

如上操作依次找到手机框架最外面的四条边

几何关系 1 ~ 4

找相邻两条边的交点

image-20260401152228661

几何关系 5 ~ 6

找到两点的对角线

image-20260401153004716

元素选择对角的两个点,结果勾选拟合线。

几何关系 7

找到对角线的交点

image-20260401153157968

元素选择两条对角线,结果勾选交点。

添加延时(300ms):

image-20260401153439253

gc3.3.运行结果

image-20260401153918243

工程四:灰度匹配圆形

素材:圆形工件图.zip - 蓝奏云

gc4.1.流程概览

image-20260401163320602

gc4.2.步骤细节

图像导入:开启循环

灰度匹配image-20260401163506890

​ 使用画矩形,框选工件

ROI基准设置

image-20260401163627625

找圆

image-20260401163817673

时间:延时300ms

gc4.3.运行结果

image-20260401170204568

工程五:找圆找方中心

素材:基本图形定位.zip - 蓝奏云

gc5.1.新机制:事件跳转

image-20260401173220750

gc5.2.流程概览

image-20260401174551642

image-20260401174606475

gc5.3.步骤细节

【事件设置】勾选 延时【找 圆/方 跳转】 结束 【状态】

image-20260401175532663

找方 **参考 工程三找圆** 参考 工程四

gc5.4.运行结果

image-20260401175001219

理论(二):Jscript脚本基础使用

ll2.1.添加变量

image-20260401201009685

ll2.2.变量类型说明

N: number 数字变量,数据是表示数量、可以进行数值运算的数据类型。

数值型数据由数字、小数点、正负号和字母 E 组成,用字母 N 表示。数值型数据的取值范围是:-0.9999999999E+19+到 0.9999999999E+20,包括正负号、小数点和字母 E 在内,其长度最大 20 位。通常用于表示实数。

S: string 字符串变量,由数字、字母、下划线组成的一串字符。在脚本中使用时需要用英文的单引号‘’或者双引号“”引用起来。 B: bool 布尔变量,尔型变量只有两个值,即 false(假)和 true(真)。 P: point 坐标点变量 [不是指针],其成员有两个,即 Point x 和 Point y。 3D_P:3D 点类型:其成员有三个,即 Point x 和 Point y 和 Point z。 3D_PL:3D 平面类型: 其成员有四个,即 A、B、C、D,ABC 是平面的向量(X,Y,Z),D 是原点到平面的距离(存在正负)。 M: 矩阵类型:其成员有两个,即行跟列,可以自定义矩阵大小,通过行数、列数来设置,矩阵最小是 2*2。

ll2.3.变量的赋值与常用函数

image-20260401202345255

// 数值/字符数组/布尔变量的赋值
Vars.Var1 = 78
Vars.Var2 = "fshifaf的萨芬1324=-"
Vars.Var3 = true

// 点变量的赋值
Vars.Var4.x = 2
Vars.Var4.y = 1
Vars.Var4 = {x:3,y:5}

// 数值/字符 数组元素的赋值
Vars.Var5[3] = 21
Vars.Var6[2] = "sdfsa"

// 基本运算
Vars.Var1 = 7/8
Vars.Var2 = "abc"+"123"

// 变量名可以是中文
var 中文 = 1234

// if结构测试
var a = 10
var b = 20

if (a > b)
{
    Vars.Var1 = b
}
else
{
    Vars.Var1 = a
}

// switch结构测试
var n = 3

switch(n)
{
case 1:
Vars.Var2 = "a"
break;

case 2:
Vars.Var2 = "b"
break;

default:
Vars.Var2= "n"
break;
}

// while结构测试
var a = 0
while(true)
{
    Vars.Var1 = Vars.Var1 + a
    a++
    if(a > 100)
    {
        break;
    }
}

Vars.Var1 = 0
Vars.Var2 = ""

for(i = 0; i<10; i++)
{
    for(j = 0; j<10; j++)
    {
        Vars.Var2 += i+"*"+j+"="+i*j+" "
    }
}

// 常用Jscript函数
var s = "T1,1,3.786,3,60"
Vars.Var6 = s.split(",")

Vars.Var1 = parseInt(Vars.Var6[2])

var n = 3.2432523
Vars.Var2 = n.toFixed(3)
Vars.Var1 = Math.round(n*1000)/1000

工程六:脚本联动使用

素材:多电容图.zip - 蓝奏云

gc6.1.流程概览

image-20260401204947899

gc6.2.步骤细节

gc6.2.1.粗定位

图像导入:取消图片循环,参考跳转到指定位置

灰度匹配:添加匹配数目 (10)

image-20260401205108992

gc6.2.2.精定位

脚本配置

先添加这四个变量

image-20260401205408899

脚本内容

Vars.P_当前参考点 = 粗定位_灰度匹配_1.centers[Vars.N_定位计数]
Vars.N_当前参考角度 = 粗定位_灰度匹配_1.angles[Vars.N_定位计数]
Vars.N_定位计数 ++
Vars.B_定位结束 = false
if(Vars.N_定位计数 >= 粗定位_灰度匹配_1.centers.length)
{
    Vars.B_定位结束 = true
    Vars.N_定位计数 = 0
}

ROI校正基准设置

image-20260401205547236

找圆 : 注意上一步的ROI在哪一块【看红十字位置】

image-20260401205703905

image-20260401205837310

时间 :延时300ms

OCR:同样注意ROI的位置,使用预训练模型

image-20260401210002608

gc6.3.运行结果

image-20260401210016266

工程七:多个目标定位

素材:纸素材.zip - 蓝奏云

gc7.1.流程概览

image-20260402141337975

gc7.2.步骤细节

gc7.2.1.粗定位

Blob分析

image-20260402141451327

gc7.2.2.精定位

脚本

​ 变量内容:

image-20260402141614808

​ 脚本内容:

ROI校正基准设置

image-20260402141823420

​ 注意:做完这一步后运行一下算子块,看当前ROI定位在哪一个目标上

找直线 1 ~ 4,几何关系 1 ~ 7

​ 参考工程三,主要目的是找中心点坐标。

时间

​ 延时300ms

gc7.3.运行结果

image-20260402142304322

工程八:工件精细测量

素材:接口与齿轮.zip - 蓝奏云

gc8.1.流程概览

gc8.1.1.流程图

流程类似于 工程五 , 区别在于: 本工程分支流程中不要单独设置tcp通讯发送到通讯助手,而是将数据写入通讯字符变量,最后交由主流程统一发送

image-20260402144721932

gc8.1.2.变量列表

image-20260402143117318

gc8.1.3.注意:

最后的【发送数据】算子块内 填 上面设置的变量

image-20260402143334366

gc8.2.步骤细节

gc8.2.1.主流程

image-20260402145830938

gc8.2.2.卡尺测量流程

gc8.2.2.1.子流程及脚本

注意:换行是\r\n

image-20260402154924168

gc8.2.2.2.粗定位

gc8.2.2.2.1.Blob分析_1

调整参数,大致匹配整个工件

image-20260402152745071

注意结果输出设置

image-20260402152834034

gc8.2.2.2.2.ROI校正基准设置_1

image-20260402152859044

gc8.2.2.2.3.Blob分析_2

精确匹配pin针,

注意开启ROI校正(图见此页:跳转到指定位置

​ 【参数设置如下】

image-20260402152936279

gc8.2.2.3.测量

gc8.2.2.3.1.ROI校正基准设置_1

image-20260402153550245

gc8.2.2.3.2.卡尺

注意上一步中ROI十字在哪一个pin针上

image-20260402153908478

gc8.2.3.找圆工件流程

gc8.2.3.1.子流程及脚本

注意:换行是\r\n

image-20260402152358231

gc8.2.3.2.找圆粗定位

gc8.2.3.2.1.灰度匹配

注意【匹配数目】的值

image-20260402154030871

gc8.2.3.3.找圆精定位

gc8.2.3.3.1.ROI校正基准设置

image-20260402154127807

gc8.2.3.3.2.找圆

注意上一步中ROI十字在哪一个工件上

注意开启ROI校正(图见此页:跳转到指定位置

image-20260402154228725

gc8.3.运行结果

![屏幕截图_20260402122243](/pages/pic/71%E5%B7%A5%E7%A8%8B%E5%85%AB%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C_1.webp)

![屏幕截图_20260402122232](/pages/pic/72%E5%B7%A5%E7%A8%8B%E5%85%AB%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C_2.webp)

工程九:工程八完善

gc9.1.主流程中

gc9.1.1.通讯算子块

先添加一个【指令类型】的 N类型数据

image-20260403100713161

填加一个【脚本】算子

image-20260403100512457

脚本内容:

//判断通讯是否有信号
Vars.N_指令类型_G = 0
if(通讯_TCP_IP_1.stepStatus)
{
    //指令拆分
    var ss  = 通讯_TCP_IP_1.dataString.split(",")
    Vars.N_指令类型_G = parseInt(ss[1])
}

gc9.1.2.switch1算子块

更改为对应的条件

image-20260403110934634

gc9.2.卡尺测量流程

gc9.2.1.【测量】算子块中

gc9.2.1.1.添加一个S变量

image-20260403112113591

gc9.2.1.2.【脚本1】改为

Vars.P_测量点位 = 粗定位_Blob分析_2.center[Vars.N_测量计数]
Vars.N_测量计数 ++

gc9.2.1.3.【脚本2】改为

if(测量_卡尺_1.stepStatus)
{
    Vars.S_卡尺显示 = Vars.N_测量计数+"\r\nOK\r\n"+
    "中心X:"+Vars.P_测量点位.x.toFixed(3)+"\r\n"+
    "中心Y:"+Vars.P_测量点位.y.toFixed(3)+"\r\n"+
    "宽度:"+测量_卡尺_1.caliper_width.toFixed(3)
    
    Vars.S_发送数据 += Vars.N_测量计数+":OK,"
    +测量_卡尺_1.caliper_width.toFixed(3)+";\r\n"
}
else
{    
    Vars.S_卡尺显示 = Vars.N_测量计数+"\r\nNG\r\n中心X:0\r\n中心Y:0\r\n宽度:0"  
    Vars.S_发送数据 += Vars.N_测量计数+":NG,0;\r\n" 
}

//判断是否结束
Vars.B_测量结束标志 = false
if(Vars.N_测量计数>=粗定位_Blob分析_2.count)
{
    Vars.N_测量计数 = 0
    Vars.B_测量结束标志 = true
}

gc9.2.2.添加【数据导出】算子块

gc9.2.2.0.算子块说明

在【测量】算子块与【goto1】算子块中添加一个【数据显示与导出】算子块

image-20260403111652081

gc9.2.2.1.时间1

时钟记录,用于csv导出

image-20260404213329844

gc9.2.2.2.图形显示1

在图像窗口显示数据,注意关闭【清除窗口】选项

image-20260404213734228

gc9.2.2.3.时间2

用于延时,增加数据显示间隔

image-20260404213910235

gc9.2.2.4.图像导出-OK原图

注意:为引用时间

剩余配置如下图

image-20260404213956444

gc9.2.2.5.图像导出-OK窗口图

image-20260404214139857

gc9.2.2.6.图像导出-NG原图

同【图像导出-OK原图】,不同点在于保存条件的选【否】

gc9.2.2.7.图像导出-NG窗口图

类似上一步

注意:【图像导出-NGxx图】算子状态为 NG 是正常的

image-20260404214609918

gc9.2.2.8.CSV导出

如图:

如果有某些数据没有则去对应的算子【结果数据】开启对应的数据【全流程】有效,具体跳转 跳转到指定位置

image-20260404214416944

9.3.找圆工件流程

也添加一个【数据显示与导出】算子块,类似【卡尺】

提示:由于目前版本延时有点小问题,最好把【数据显示】相关的两个算子放入【测量】算子块

image-20260404220944327

9.4.运行结果

最后导出的数据结果,这里只列出导出的文件结构与csv文件内容:

wxz@LAPTOP-CJNATPRL:/mnt/c/Users/wxz/Desktop/opt奥普特实践/02-资料/串口与齿轮$ tree
.
├── 多点卡尺图
│   └── 卡尺测量
│       └── 2026-04-04
│           ├── 2026-04-04.csv
│           └── 卡尺测量
│               └── OK
│                   ├── 原图
│                   │   ├── 2026-04-04_22-13-43-372.bmp
│                   │   ├── 2026-04-04_22-13-44-027.bmp
│                   │   ├── 2026-04-04_22-13-44-678.bmp
│                   │   ├── 2026-04-04_22-13-45-354.bmp
│                   │   ├── 2026-04-04_22-13-46-008.bmp
│                   │   ├── 2026-04-04_22-13-46-659.bmp
│                   │   ├── 2026-04-04_22-13-47-317.bmp
│                   │   ├── 2026-04-04_22-13-47-970.bmp
│                   │   ├── 2026-04-04_22-13-48-644.bmp
│                   │   ├── 2026-04-04_22-13-49-300.bmp
│                   │   ├── 2026-04-04_22-13-49-987.bmp
│                   │   └── 2026-04-04_22-13-50-645.bmp
│                   └── 窗口图
│                       ├── 2026-04-04_22-13-43-373.bmp
│                       ├── 2026-04-04_22-13-44-027.bmp
│                       ├── 2026-04-04_22-13-44-678.bmp
│                       ├── 2026-04-04_22-13-45-355.bmp
│                       ├── 2026-04-04_22-13-46-008.bmp
│                       ├── 2026-04-04_22-13-46-659.bmp
│                       ├── 2026-04-04_22-13-47-317.bmp
│                       ├── 2026-04-04_22-13-47-970.bmp
│                       ├── 2026-04-04_22-13-48-644.bmp
│                       ├── 2026-04-04_22-13-49-300.bmp
│                       ├── 2026-04-04_22-13-49-987.bmp
│                       └── 2026-04-04_22-13-50-645.bmp
└── 多点找圆图
    └── 2026-04-04
        ├── 2026-04-04.csv
        └── 找圆
            └── OK
                ├── 原图
                │   ├── 2026-04-04_22-13-37-537.bmp
                │   ├── 2026-04-04_22-13-38-177.bmp
                │   ├── 2026-04-04_22-13-38-852.bmp
                │   ├── 2026-04-04_22-13-39-523.bmp
                │   ├── 2026-04-04_22-13-40-160.bmp
                │   └── 2026-04-04_22-13-40-798.bmp
                └── 窗口图
                    ├── 2026-04-04_22-13-37-538.bmp
                    ├── 2026-04-04_22-13-38-177.bmp
                    ├── 2026-04-04_22-13-38-852.bmp
                    ├── 2026-04-04_22-13-39-523.bmp
                    ├── 2026-04-04_22-13-40-160.bmp
                    └── 2026-04-04_22-13-40-798.bmp

14 directories, 38 files

wxz@LAPTOP-CJNATPRL:/mnt/c/Users/wxz/Desktop/opt奥普特实践/02-资料/串口与齿轮$ cat 多点找圆图/2026-04-04/2026-04-04.csv
时间,序号,状态,中心X,中心Y,
2026.04.04 22.13.36.926,1,True,809.017,628.758,
2026.04.04 22.13.37.569,2,True,426.802,444.874,
2026.04.04 22.13.38.232,3,True,845.736,204.645,
2026.04.04 22.13.38.901,4,True,1267.115,651.342,
2026.04.04 22.13.39.551,5,True,449.129,867.442,
2026.04.04 22.13.40.189,0,True,1192.077,378.110,

wxz@LAPTOP-CJNATPRL:/mnt/c/Users/wxz/Desktop/opt奥普特实践/02-资料/串口与齿轮$ cat 多点卡尺图/卡尺测量/2026-04-04/2026-04-04.csv
时间,序号,状态,中心X,中心Y,宽度,
2026.04.04 22.13.42.764,1,True,791.000,839.000,34.372,
2026.04.04 22.13.43.415,2,True,877.500,839.000,31.640,
2026.04.04 22.13.44.070,3,True,1019.500,839.000,32.871,
2026.04.04 22.13.44.740,4,True,1093.361,838.992,31.936,
2026.04.04 22.13.45.397,5,True,1172.500,839.000,32.265,
2026.04.04 22.13.46.049,6,True,1248.500,839.000,32.830,
2026.04.04 22.13.46.707,7,True,1388.500,839.000,33.281,
2026.04.04 22.13.47.360,8,True,1473.174,838.992,31.263,
2026.04.04 22.13.48.030,9,True,1551.000,839.000,33.383,
2026.04.04 22.13.48.690,10,True,1627.000,839.000,31.647,
2026.04.04 22.13.49.372,11,True,1770.871,838.989,31.520,
2026.04.04 22.13.50.033,0,True,1848.280,839.006,34.586,

理论(三):相机标定:从入门到实战

本文参考相机标定:从入门到实战 - 知乎

ll3.1.什么是相机标定?

img

ll3.2.为什么要相机标定?

相机标定的目的就是找到相机的数学模型,得到这个数学模型的函数映射关系,求出这个数学模型中参数。另外通过求解这个函数的“反函数”(成像的反过程),根据获得的二维图片恢复三维场景。

img

img

ll3.3.坐标系的建立

ll3.3.1. 世界坐标系 (World Coordinate System)

ll3.3.2. 相机坐标系 (Camera Coordinate System)

ll3.3.3. 图像坐标系 / 像素坐标系 (Image / Pixel Coordinate System)


总结关系: 光线从世界坐标系中的物体发出,经过相机坐标系(以透镜中心为原点)的投影变换,最终落在图像坐标系/像素坐标系(2D平面)上形成图像。

img

img


ll3.4.常见标定类型解析

ll3.4.1.点距离标定

ll3.4.2.旋转标定

ll3.4.3.定常标定

ll3.4.4.多目立体视觉


ll3.5.重点:九点标定

ll3.5.1.为什么需要九点标定?

ll3.5.3.九点标定操作流程

  1. 新建方案:在标定管理中选择“九点标定”。
  2. 选择坐标系:分别选择相机坐标系和目标坐标系(若无标定文件可新建)。
  3. 选择标定板类型
    • 棋盘格标定板:黑白方格,最常用。
    • 点标定板:圆点阵列。
    • 二维码标定板:基于QR码。
  4. 设置参数:输入标定板单元格的实际物理尺寸(如2mm)。
  5. 加载图像
    • 若连接相机则直接拍摄;若使用图片则导入标定板图像。
  6. 执行标定:点击“标定”按钮,系统自动计算并生成标定文件,提示偏差信息。

工程10:九点标定练习

素材:标定图.zip - 蓝奏云

gc10.1.添加变量

image-20260404224114498

gc10.2.流程概览

image-20260404224040404

gc10.3.步骤细节

gc10.3.1标定粗定位

gc10.3.1.1图像导入

导入如下图片,取消勾选【图片循环加载】

image-20260404224255438

gc10.3.1.2.图像Blob分析

先删除默认的ROI框,参考跳转到指定位置

然后如图,注意排序,从左到右,从上到下

image-20260404224423935

gc10.3.1.3.变量赋值

注意设置世界坐标九点

image-20260404224846272

gc10.3.2.标定精定位

gc10.3.2.1.脚本1

Vars.P_标定参考点 = 标定粗定位_Blob分析_1.center[Vars.N_标定计数]

gc10.3.2.2.ROI基准校正设置

image-20260404225638758

gc10.3.2.3.找圆

注意上一步的ROI基准校正设置 红色十字在哪里

image-20260404230023276

gc10.3.2.4.脚本2

Vars.PA_相机坐标九点[Vars.N_标定计数] = 标定精定位_找圆_1.center
Vars.N_标定计数 ++

Vars.B_标定完成 = false
if(Vars.N_标定计数>=9)
{
    Vars.N_标定计数 = 0
    Vars.B_标定完成 = true
}

gc10.3.3.生成标定文件

gc10.3.3.1.多点标定

image-20260404231134107

gc10.4.运行结果

image-20260404230636460

理论(四):工业视觉硬件系统与贴合技术

ll4.1.硬件部分

工业视觉项目核心硬件(图像采集相关):相机、镜头、光源(硬件连接将在实操培训中学习)。

核心工作流程:流水线工件流过后,通过光源、相机、镜头采集图像 → 图像传输至电脑处理 → 处理后输出结果 → 控制机械手等执行动作。

基础硬件示例:环形光源、定焦镜头、普通2D相机(本次讲解均围绕2D相机,3D相机后续另行了解);相机成像原理基于光电效应,本次在前期基础上进一步深入。

ll4.1.1.相机类型与传感器分类

ll4.1.1.1. 按传感器芯片分类(核心:两种材质差异)

补充:相机24V电源口,原用于CCD相机供电,现可用于供电或连接触发线(IO线),多数CMOS相机可通过数据传输口直接供电。

ll4.1.1.2. 按成像方式分类

ll4.1.1.3. 按颜色分类

彩色相机、黑白相机。

ll4.1.2.相机核心参数

ll4.1.3.相机数据接口类型

常用接口:网口、USB口(四种接口均有应用,以这两种为主)。

ll4.1.4.镜头相关知识

ll4.1.4.1. 镜头核心作用

将目标物体的光线汇聚到相机传感器芯片上,实现清晰成像。

ll4.1.4.2. 镜头基本类型(常规首选定焦镜头,特殊需求用后两种)

ll4.1.4.3. 镜头关键参数

ll4.1.4.4. 镜头畸变(重点)

ll4.1.5.光源相关知识

ll4.1.5.1. 工业光源的核心目的

ll4.1.5.2. 光源打光原理(示例)

相机从上往下拍摄梯形工件:

ll4.1.5.3. 工业常见光源类型

调形光源、环形光源(可平面/斜角照射,中间可放置镜头)、面光、组合光、同轴光(镜头取光与光源出光方向一致)、球积分光(四面打亮)、远心光、背光。

ll4.2.贴合技术

ll4.2.1.贴合的核心定义

又称视觉引导定位,核心是“定位抓取+定位放置”,即通过视觉引导机械手,将目标物体(如电池)抓取并精准放置到指定位置(如手机背框),是工业上常见的项目类型。

ll4.2.2.定位抓取/放置的工作流程(分两种场景)

ll4.2.2.1. 无视觉参与(固定位置/固定偏移)

ll4.2.2.2. 有视觉参与(不规则偏移/角度偏差)

核心:通过相机拍照,结合标定,计算出目标物体与视觉点的实时偏移量,无需手动测量固定偏移,可应对物体乱放的场景。

重点:当目标物体存在角度偏差时,需解决“角度转正后位置偏移”的问题,核心是确定机械手的旋转中心。

ll4.2.3.角度偏差的解决方法(核心:旋转中心标定)

ll4.2.4.贴合项目补充说明

贴合项目分单相机、双相机两种场景:双相机需分别拍摄抓取位和放置位;单相机仅拍摄一个位置即可。核心参数包括视角位、模板位、实时位(拍照位不重要)。

要求:后续升L2考核需完全掌握贴合项目的流程和操作。

工程11:UI设计练习

素材:同工程10,见:点击跳转

gc11.1.变量设置

image-20260405105320391

gc11.2.流程概览

gc11.2.1.主流程

image-20260405105223626

gc11.2.2.标定流程

image-20260405110002081

注意:

【生成标定】–>【多点标定】–>【结果输出】

屏幕截图_20260405_101806

gc11.2.3.定位流程

image-20260405110438324

gc11.3.步骤细节

这里只说明【定位流程】的细节

gc11.3.1.灰度匹配

image-20260405110727159

gc11.3.2.ROI校正基准设置

image-20260405111243479

gc11.3.3.找圆

image-20260405111308084

gc11.3.4.找直线

image-20260405111323789

gc11.3.5.几何关系

image-20260405111353917

gc11.3.6.标定转换

image-20260405111414318

gc11.3.7.脚本

if(定位_灰度匹配_1.stepStatus&&定位_找圆_1.stepStatus&&定位_找直线_1.stepStatus
&&定位_找直线_1.angle<Vars.N_角度上限&&定位_找直线_1.angle>Vars.N_角度下限)
{
    Vars.S_发送数据_G = "A,OK,"+定位_标定转换_1.定位_找圆_1_center_calib.x.toFixed(3)+","+定位_标定转换_1.定位_找圆_1_center_calib.y.toFixed(3)+","+定位_标定转换_1.定位_几何关系_1_mindistance_calib.toFixed(3)
    Vars.N_定位OK计数++
}
else
{
    Vars.S_发送数据_G = "A,NG,0,0,0"
    Vars.N_定位NG计数++
}
Vars.N_定位总数++

gc11.4.UI设计

gc11.4.1.主界面

image-20260405111638857

gc11.4.2.标定界面

image-20260405111712900

gc11.5.运行结果

屏幕截图_20260405_103604

工程12:考核模拟练习

素材:考核题 图.zip - 蓝奏云

gc12.1.流程概览

image-20260405231954533

gc12.2.步骤细节

gc12.3.UI设计

见结果,细节略

gc12.4.运行结果

gc12.4.1.标定运行

image-20260405232203377

gc12.4.2.工件一

image-20260405232219398

image-20260405232224106

gc12.4.3.工件二

image-20260405232246147

image-20260405232250628

gc12.5.我的总结

这个工程的步骤细节就不列了,这里主要记录一下我的失误和不足

gc12.5.1.问题记录

gc12.5.1.1.标定生成

明明九个相机坐标和对应的世界坐标生成好了,但标定生成失败

解决:

image-20260405232658184

【标定设置】–>【坐标系管理】设置的问题,新建相机坐标系与世界坐标系。

gc12.5.1.2.常用函数

Jscript 脚本常用的几个函数记不清楚,使用时还要翻笔记。

解决:

# 牢记这几个
# 分割字符串
split
# 字符转数值
parseInt
parseFloat
# 控制小数点位数
toFixed

gc12.5.1.3.变量设置

变量设置不清晰,写脚本时,在计数时本来应该用“工件一计数”,结果使用的是“标定计数”

gc12.5.1.4.找直线问题

在找直线时总有一条边匹配失败

解决:

在找线的【参数设置】前,先【预处理】 使用二值化

gc12.5.1.5.可用范围

因为算子的大部分输出值都是在所在的算子快内有效,我流程分得太细,总是要去上一个算子块中去调整算子输出值的可用范围。

酌情优化:

合并部分流程,把算子放入一个算子块。

gc12.5.2.未完成部分

通讯连接状态(不是通讯状态)—已解决 日志刷新—已解决 表格标红—已解决

gc12.5.3.可优化部分

工件一部分,要逐个ROI变量12个位置,当前我是使用(12-工件数目) 工件二的中心应该是最中间的小方块中心,当前我是电池极耳底下一条线的中点

工程13:最终项目考核

gc13.1.流程概览

image-20260407152945986

略略略……